package com.micro.ai.template.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j API文档配置
 *
 * @author micro-ai
 * @since 0.0.1
 */
@Configuration
public class Knife4jConfig {

    /**
     * OpenAPI配置
     */
    @Bean
    public OpenAPI templateOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("Micro-AI Template 模板服务API")
                        .description("AI Agent模板管理、Agent实例管理、工作流管理等服务接口")
                        .version("v1.0.0")
                        .contact(new Contact()
                                .name("Micro-AI Team")
                                .email("support@micro-ai.com")
                                .url("https://micro-ai.com"))
                        .license(new License()
                                .name("Apache 2.0")
                                .url("https://www.apache.org/licenses/LICENSE-2.0")))
                .addSecurityItem(new SecurityRequirement().addList("Bearer认证"))
                .components(new io.swagger.v3.oas.models.Components()
                        .addSecuritySchemes("Bearer认证", new SecurityScheme()
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("bearer")
                                .bearerFormat("JWT")
                                .description("请在下方输入JWT令牌（不需要Bearer前缀）")));
    }

    /**
     * 1. 模板管理API分组
     */
    @Bean
    public GroupedOpenApi templateApi() {
        return GroupedOpenApi.builder()
                .group("1-模板管理")
                .pathsToMatch("/api/templates/**")
                .build();
    }

    /**
     * 2. 模板版本管理API分组
     */
    @Bean
    public GroupedOpenApi templateVersionApi() {
        return GroupedOpenApi.builder()
                .group("2-模板版本管理")
                .pathsToMatch("/api/template/versions/**")
                .build();
    }

    /**
     * 3. 分类管理API分组
     */
    @Bean
    public GroupedOpenApi categoryApi() {
        return GroupedOpenApi.builder()
                .group("3-分类管理")
                .pathsToMatch("/api/template/category/**")
                .build();
    }

    /**
     * 4. 模板评分API分组
     */
    @Bean
    public GroupedOpenApi templateRatingApi() {
        return GroupedOpenApi.builder()
                .group("4-模板评分")
                .pathsToMatch("/api/template/ratings/**")
                .build();
    }

    /**
     * 5. 模板收藏API分组
     */
    @Bean
    public GroupedOpenApi templateFavoriteApi() {
        return GroupedOpenApi.builder()
                .group("5-模板收藏")
                .pathsToMatch("/api/template/favorites/**")
                .build();
    }

    /**
     * 6. 模板分享API分组
     */
    @Bean
    public GroupedOpenApi templateShareApi() {
        return GroupedOpenApi.builder()
                .group("6-模板分享")
                .pathsToMatch("/api/template/shares/**")
                .build();
    }

    /**
     * 7. 模板审核API分组
     */
    @Bean
    public GroupedOpenApi templateReviewApi() {
        return GroupedOpenApi.builder()
                .group("7-模板审核")
                .pathsToMatch("/api/template/reviews/**")
                .build();
    }

    /**
     * 8. 模板标签API分组
     */
    @Bean
    public GroupedOpenApi templateTagApi() {
        return GroupedOpenApi.builder()
                .group("8-模板标签")
                .pathsToMatch("/api/template/tags/**")
                .build();
    }

    /**
     * 9. Agent管理API分组
     */
    @Bean
    public GroupedOpenApi agentApi() {
        return GroupedOpenApi.builder()
                .group("9-Agent管理")
                .pathsToMatch("/api/agents/**")
                .build();
    }

    /**
     * 10. Agent指标API分组
     */
    @Bean
    public GroupedOpenApi agentMetricApi() {
        return GroupedOpenApi.builder()
                .group("10-Agent指标")
                .pathsToMatch("/api/agent/metrics/**")
                .build();
    }

    /**
     * 11. 工作流管理API分组
     */
    @Bean
    public GroupedOpenApi workflowApi() {
        return GroupedOpenApi.builder()
                .group("11-工作流管理")
                .pathsToMatch("/api/workflows/**")
                .build();
    }

    /**
     * 12. 执行日志API分组
     */
    @Bean
    public GroupedOpenApi executionLogApi() {
        return GroupedOpenApi.builder()
                .group("12-执行日志")
                .pathsToMatch("/api/execution/logs/**")
                .build();
    }

    /**
     * 13. 模板统计API分组
     */
    @Bean
    public GroupedOpenApi templateStatisticApi() {
        return GroupedOpenApi.builder()
                .group("13-模板统计")
                .pathsToMatch("/api/template/statistics/**")
                .build();
    }

    /**
     * 14. 综合分析API分组
     */
    @Bean
    public GroupedOpenApi analyticsApi() {
        return GroupedOpenApi.builder()
                .group("14-综合分析")
                .pathsToMatch("/api/analytics/**")
                .build();
    }
}

